In the modern software industry a medium-to-large sized company usually creates not only a large variety of software applications but also many different variations of each application such as different SKUs, localized versions, etc. A vast majority of software applications on the market have Graphical User Interfaces (GUI, or UI).
The quality of shipped applications, including UI-based applications, is typically assured by running automated tests. Currently there are two major approaches for creating such automation: (1) running a test by simulating user input, i.e., driving a UI-based application under test via simulated user input (e.g., mouse and keyboard input) generated programmatically; and (2) running a test by calling internal application programming interfaces (APIs) for the application under test.